﻿using Newtonsoft.Json;
using QWManage.Model;
using QWManage.Utils;
using System.Collections.Generic;

namespace QWManage.API.TagLibrary92117
{
    /// <summary>
    /// 获取企业标签库
    /// 企业可通过此接口获取企业客户标签详情。
    /// </summary>
    internal class TagLibraryAPI
    {
        //文档 https://developer.work.weixin.qq.com/document/path/92117
        //请求方式: POST(HTTP)
        //请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token=ACCESS_TOKEN\
        /*请求示例:
             {
	            "tag_id": 
	            [
		            "etXXXXXXXXXX",
		            "etYYYYYYYYYY"
	            ],
	            "group_id":
	            [
		            "etZZZZZZZZZZZZZ",
		            "etYYYYYYYYYYYYY"
	            ]
            }
            若tag_id和group_id均为空，则返回所有标签。
            同时传递tag_id和group_id时，忽略tag_id，仅以group_id作为过滤条件。
         */
        public static List<TagInfo> Invoke(string token, TagLibraryArgs args)
        {
            List<TagInfo> tagInfos = new List<TagInfo>();
            string url = $"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token={token}";
            string parameters = JsonConvert.SerializeObject(args);
            string json = HttpHelper.Submit(url, parameters);
            Root root = JsonConvert.DeserializeObject<Root>(json);
            foreach (var tagGroup in root.tag_group)
            {
                foreach (var tag in tagGroup.tag)
                    tagInfos.Add(new TagInfo() { ID = tag.id, Name = tag.name });
            }
            return tagInfos;
        }
    }
    #region 参数
    public class TagLibraryArgs
    {
        public string[] tag_id { set; get; }
        public string[] group_id { set; get; }
    }
    #endregion


    #region JSON
    public class Tag
    {
        /// <summary>
        /// 
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// 流失客户-芝麻
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public int create_time { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public int order { get; set; }
    }

    public class Tag_group
    {
        /// <summary>
        /// 
        /// </summary>
        public string group_id { get; set; }
        /// <summary>
        /// 芝麻微客标签
        /// </summary>
        public string group_name { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public int create_time { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<Tag> tag { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public int order { get; set; }
    }

    public class Root
    {
        /// <summary>
        /// 
        /// </summary>
        public int errcode { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string errmsg { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public List<Tag_group> tag_group { get; set; }
    }
    #endregion
}


//注意事项：
//开发者需要缓存access_token，用于后续接口的调用（注意：不能频繁调用gettoken接口，否则会受到频率拦截）。当access_token失效或过期时，需要重新获取。
//access_token的有效期通过返回的expires_in来传达，正常情况下为7200秒（2小时），有效期内重复获取返回相同结果，过期后获取会返回新的access_token。
//由于企业微信每个应用的access_token是彼此独立的，所以进行缓存时需要区分应用来进行存储。
//access_token至少保留512字节的存储空间。
//企业微信可能会出于运营需要，提前使access_token失效，开发者应实现access_token失效时重新获取的逻辑。